// ( m3.C ) // ウィジットを複数作成する場合の記述の仕方 // #include #include #include class Push { friend void push_cb( Widget,caddr_t,caddr_t ) ; char command[20] ; Widget motif ; public: Push( Widget,char*,char* ) ; ~Push() { XtDestroyWidget( motif ) ; } void pushCB( void ) ; } ; Push::Push( Widget pid,char* str,char* cmd ) { strcpy( command,cmd ) ; motif = XmCreatePushButton( pid,str,NULL,0 ) ; XtManageChild( motif ) ; XtAddCallback( motif,XmNactivateCallback,(XtCallbackProc)push_cb,(caddr_t)this ) ; } void Push::pushCB() { extern void EXE_COMMAND( char* ) ; EXE_COMMAND( this->command ) ; } void push_cb( Widget ww,caddr_t myself,caddr_t event ) { Push* push = (Push*)myself ; if ( push ) push->pushCB() ; } void sub1() { cout << "select 1\n" ; cout.flush() ; } void sub2() { cout << "select 2\n" ; cout.flush() ; } void EXE_COMMAND( char* cmd ) { if ( strcmp(cmd,"cmd1")==0 ) sub1() ; else if ( strcmp(cmd,"cmd2")==0 ) sub2() ; } static String fallback[] = { "*BB.x : 0","*BB.y : 0", "*BB.width: 250","*BB.height: 200", "*PB-1.x : 50","*PB-1.y : 50", "*PB-2.x : 150","*PB-2.y : 50",NULL } ; void main( int argc,char** argv ) { XtAppContext appCon ; Widget top,bb ; top = XtAppInitialize( &appCon,NULL,NULL,0,&argc,argv, fallback,NULL,0 ) ; bb = XmCreateBulletinBoard( top,"BB",NULL,0 ) ; XtManageChild(bb) ; Push pb1( bb,"PB-1","cmd1" ) ; // これは簡単!。これだけでプッシュ Push pb2( bb,"PB-2","cmd2" ) ; // ボタン・ウィジットを幾つでも作れる。 XtRealizeWidget( top ) ; XtAppMainLoop( appCon ) ; }